home *** CD-ROM | disk | FTP | other *** search
/ Pascal Super Library / Pascal Super Library (CW International)(1997).bin / DELPHI32 / AUDIO / MIDICOM2 / MIDITYPE.PAS < prev    next >
Pascal/Delphi Source File  |  1996-04-30  |  2KB  |  80 lines

  1. { $Header:   G:/delphi/midi/vcs/miditype.pas   1.1   30 Apr 1996 19:02:46   DAVEC  $ }
  2.  
  3. { Written by David Churcher <dchurcher@cix.compulink.co.uk>,
  4.   released to the public domain. }
  5.  
  6.  
  7. unit Miditype;
  8.  
  9. interface
  10.  
  11. uses Classes, Wintypes, Messages, MMSystem, MidiDefs, Circbuf;
  12.  
  13. type
  14.     {-------------------------------------------------------------------}
  15.     { A MIDI input/output event }
  16.     TMyMidiEvent = class(TPersistent)
  17.     public
  18.         MidiMessage: Byte;          { MIDI message status byte }
  19.         Data1: Byte;            { MIDI message data 1 byte }
  20.         Data2: Byte;            { MIDI message data 2 byte }
  21.         Time: DWORD;          { Time in ms since midiInOpen }
  22.         SysexLength: Word;  { Length of sysex data (0 if none) }
  23.         Sysex: PChar;           { Pointer to sysex data buffer }
  24.         destructor Destroy; override;   { Frees sysex data buffer if nec. }
  25.     end;
  26.     PMyMidiEvent = ^TMyMidiEvent;
  27.  
  28.     {-------------------------------------------------------------------}
  29.     { Encapsulates the MIDIHDR with its memory handle and sysex buffer }
  30.     PMyMidiHdr = ^TMyMidiHdr;
  31.     TMyMidiHdr = class(TObject)
  32.     public
  33.         hdrHandle: THandle;
  34.         hdrPointer: PMIDIHDR;
  35.         sysexHandle: THandle;
  36.         sysexPointer: Pointer;
  37.         constructor Create(BufferSize: Word);
  38.         destructor Destroy; override;
  39.     end;
  40.  
  41. implementation
  42.  
  43. {-------------------------------------------------------------------}
  44. { Free any sysex buffer associated with the event }
  45. destructor TMyMidiEvent.Destroy;
  46. begin
  47.     if (Sysex <> Nil) then
  48.         Freemem(Sysex, SysexLength);
  49.  
  50.     inherited Destroy;
  51. end;
  52.  
  53. {-------------------------------------------------------------------}
  54. { Allocate memory for the sysex header and buffer }
  55. constructor TMyMidiHdr.Create(BufferSize:Word);
  56. begin
  57.     inherited Create;
  58.  
  59.     if BufferSize > 0 then
  60.         begin
  61.         hdrPointer := GlobalSharedLockedAlloc(sizeof(TMIDIHDR), hdrHandle);
  62.         sysexPointer := GlobalSharedLockedAlloc(BufferSize, sysexHandle);
  63.  
  64.         hdrPointer^.lpData := sysexPointer;
  65.         hdrPointer^.dwBufferLength := BufferSize;
  66.         end;
  67. end;
  68.  
  69. {-------------------------------------------------------------------}
  70. destructor TMyMidiHdr.Destroy;
  71. begin
  72.     GlobalSharedLockedFree( hdrHandle, hdrPointer );
  73.     GlobalSharedLockedFree( sysexHandle, sysexPointer );
  74.     inherited Destroy;
  75. end;
  76.  
  77.  
  78.  
  79. end.
  80.